package com.aatattoo.light_food_service.mapper;

import com.aatattoo.light_food_service.entity.Dynamic;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author aatattoo
 * @Date 2021/12/9 9:21 下午
 * @msg:
 */
@Mapper
@Repository
public interface DynamicMapper {

    /**
     * 新增动态
     * @param dynamic #{userId}发布动态用户id
     *                #{content}发布动态内容
     *                #{haveImg}该动态是否有图片
     *                #{haveTag}该动态是否有标签
     *                #{haveRemind}该动态是否有@的用户
     *                #{type}动态类型
     * @return
     */
    int addDynamic(Dynamic dynamic);

    /**
     * 更新动态
     * @param dynamic #{userId}  更新动态的用户id
     *                #{content} 更新发布的的动态内容
     *                #{haveImg} 更新动态是否有图片判断
     *                #{haveTag} 更新动态是否有标签判断
     *                #{haveRemind} 更新动态是否有@用户判断
     *                #{type} 动态类型
     *                #{id} 根据动态id来判断要跟新的表单内容
     * @return
     */
    int updataDynamic(Dynamic dynamic);

    /**
     * 通过表单id查找表单信息
     * @param id #{id}表单id
     * @return
     */
    Dynamic findById(@Param("id") int id);

    /**
     * 更新表单类型
     * @param dynamic #{type}类型
     *                #{id}更加被表达id来定位数据
     * @return
     */
    int updataType(Dynamic dynamic);

    /**
     * 删除单条动态
     * @param id  #{id}表单id
     * @return
     */
    int deleteById(@Param("id")int id);

    /**
     * 获取所有公开动态，排序为逆序
     * `type`=1
     * @return
     */
    List<Dynamic> getDynamicForPublic();

    /**
     * 获取指定用户公开动态，排序为逆序
     * @param userId
     * @return
     */
    List<Dynamic> getDynamicForPublicByOthUser(@Param("userId")int userId);

    /**
     * 获取朋友圈动态
     * @param idList 关注的用户的id列表
     * @return
     */
    List<Dynamic> getDynamicForPublicByUserId(@Param("idList") List<Integer> idList);

    /**
     * 获取我的动态，包含公开和不公开内容
     * @param userId 当前用户的id
     * @return
     */
    List<Dynamic> getDynamicForMine(@Param("userId")int userId);

    /**
     * 获取用户发布动态数目
     * @param userId
     * @return
     */
    int countDynamicByUserId(@Param("userId")int userId);

    /**
     * 模糊查询正文内容
     * @param content 要查询的部分内容
     * @return
     */
    List<Dynamic> fuzzyQuery(@Param("content")String content);

    /**
     * 获取所有指定标签动态（公开）
     * 排序为逆序
     * @param idList 动态id
     * @return
     */
    List<Dynamic> getDynamicForTag(@Param("idList")List<Integer> idList);

    /**
     * 获取我（用户）全部动态Id
     * @param userId
     * @return
     */
    List<Integer> getDynamicIdForMine(@Param("userId")int userId);
}
